package com.haixiaoke.saas.common.oss;

import com.aliyun.oss.model.OSSObject;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author qixi
 * @date 2023/9/22
 */
public interface OssService {

    /**
     * 上传文件到oss
     *
     * @param saveFolder    文件在oss上的路径，不传递时保存在默认的根路径下
     * @param contentType   文件类型，如：image/jpg
     * @param fileName      文件名称，如：a.jpg
     * @param contentLength 文件字节大小
     * @param input         输入流对象
     * @return oss上保存的完整访问路径，如：http://domain/{copyrightEn}/{applicationName}/{profileActive}/{saveFolder}/imageName
     */
    String upload(String saveFolder, String contentType, String fileName, long contentLength, InputStream input);

    /**
     * 有结尾类型，没有结尾默认jpg结尾
     *
     * @param saveFolder    存储的地址路径
     * @param fileMainName  文件名称
     * @param multipartFile 文件流
     * @return java.lang.String
     * @author DuanLinpeng
     * @date 2021/01/16 21:27
     */
    String upload(String saveFolder, String fileMainName, MultipartFile multipartFile) throws IOException;

    /**
     * 无结尾类型，直接上传
     *
     * @param saveFolder    存储的地址路径
     * @param fileName      文件名称
     * @param multipartFile 文件流
     * @return java.lang.String
     * @author DuanLinpeng
     * @date 2021/01/16 21:31
     */
    String upload4SpecialName(String saveFolder, String fileName, MultipartFile multipartFile);

    /**
     * 把base64字符串转换为流存到oss中
     *
     * @param saveFolder       存储的地址路径
     * @param fileName         文件名称
     * @param base64ImgContent 图片转base64字符串
     * @return java.lang.String 返回图片地址
     * @author DuanLinpeng
     * @date 2021/01/16 21:28
     */
    String uploadImgByBase64(String saveFolder, String fileName, String base64ImgContent);

    /**
     * 删除OSS中 fileUrl 的文件
     *
     * @param fileUrl
     * @return void
     * @author DuanLinpeng
     * @date 2021/01/16 21:28
     */
    void delete(String fileUrl);

    OSSObject getObject(String fileUrl);

    byte[] parseObject(OSSObject ossObject);
}